/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.unifor.sd.bolsa.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 *
 * @author Pedro
 */
public class Dialeto {

    private static final String SEPARADOR_ACOES = "#";
    private static final String SEPARADOR_ATRIBUTOS = "@";
    private static final String COMPRAR = "comprar"+SEPARADOR_ACOES;
    private static final String COMPRAR_VALOR = "comprarValor"+SEPARADOR_ACOES;
    private static final String VENDER = "vender"+SEPARADOR_ACOES;

    public static String listaDeAcoesToString(List<Acao> lista) {
        StringBuilder retorno = new StringBuilder();
        for (int i = 0; i < lista.size(); i++) {
            retorno.append(SEPARADOR_ACOES + lista.get(i).getId() + SEPARADOR_ATRIBUTOS);
            retorno.append("" + lista.get(i).getNome() + SEPARADOR_ATRIBUTOS);
            retorno.append("" + lista.get(i).getValor() + SEPARADOR_ATRIBUTOS);
            retorno.append("" + lista.get(i).getDono());
        }
        return retorno.toString();
    }

    public static String comprarToString(int acaoId, String dono) {
        return COMPRAR + acaoId + SEPARADOR_ACOES + dono;
    }

    public static String comprarComValorToString(Integer acaoId, String dono, Double valor) {
        return COMPRAR_VALOR + acaoId + SEPARADOR_ACOES + dono + SEPARADOR_ACOES + valor;
    }

    public static String venderToString(int acaoId, String dono) {
        return VENDER + acaoId + SEPARADOR_ACOES + dono;
    }

    public static List<Acao> listaStringToList(String msg) {
        List<Acao> retorno = new ArrayList<Acao>();
        Acao acaoAux;
        String[] explode = msg.split(SEPARADOR_ACOES);
        String[] explode2;
        for (int i = 1; i < explode.length - 1; i++) {
            acaoAux = new Acao();
            explode2 = explode[i].split(SEPARADOR_ATRIBUTOS);
            acaoAux.setId(Integer.parseInt(explode2[0]));
            acaoAux.setNome(explode2[1]);
            acaoAux.setValor(Double.valueOf(explode2[2]));
            acaoAux.setDono(explode2[3]);
            retorno.add(acaoAux);
        }
        return retorno;
    }

    public static Integer randomPort(Integer inicio, Integer fim){
        Integer retorno = 0;
        do{
            retorno = new Random().nextInt(fim);
        }while(retorno < inicio | retorno > fim);
        return retorno;
    }
}
